//package com.hwj.config;
//
//
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.exceptions.ValidateException;
//import cn.hutool.core.util.StrUtil;
//import cn.hutool.jwt.JWT;
//import cn.hutool.jwt.JWTUtil;
//import cn.hutool.jwt.JWTValidator;
//import com.hwj.entity.User;
//import com.hwj.exception.CustomAuthException;
//import com.hwj.service.UserInfoService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.web.servlet.HandlerInterceptor;
//import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//@Configuration
//public class AuthInterceptorConfig {
//    @Lazy
//    @Autowired
//    UserInfoService userService;
//
//    @Bean
//    public WebMvcConfigurer webMvcConfigurer() {
//        return new WebMvcConfigurer() {
//            @Override
//            public void addInterceptors(InterceptorRegistry registry) {
//                registry.addInterceptor(new HandlerInterceptor() {
//                            @Override
//                            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//                                // 在这里定义拦截器的逻辑
//                                String token = "";
//                                // 如果是 OPTIONS 请求，我们就让他通过，不管他
//                                if (request.getMethod().equals("OPTIONS")) {
//                                    response.setStatus(HttpServletResponse.SC_OK);
//                                    return true;
//                                } else {
//                                    token = request.getHeader("token");
//                                }
//                                //处理请求头
//                                return handleRequest(token, response);
//                            }
//                        }).addPathPatterns("/**")
//                        .excludePathPatterns("/userinfo/login", "/userinfo/register","/sms/**",
//                                "/webjars/**", "/swagger-resources/**","/doc.html/**","/v2/**");
//
//            }
//        };
//    }
//
//    private boolean handleRequest(String token, HttpServletResponse response) {
//        // 管理员拦截器逻辑，检查管理员是否合法
//
//        if (StrUtil.isBlank(token)) {
//            throw new CustomAuthException(401, "未获取到token, 请重新登录");
//        }
//        JWT jwt = JWTUtil.parseToken(token);
//
//        Object userId = jwt.getPayload("userId");
//
//        User user = userService.queryById(Long.parseLong(userId + ""));
//        if (user == null) {
//            throw new CustomAuthException(-1, "token不合法,校验无法通过!");
//        }
//        //校验时间
//        try {
//            JWTValidator.of(token).validateDate(DateUtil.date());
//        } catch (ValidateException e) {
//            throw new CustomAuthException(401, "token不合法,已超过会话时限，请重新登录!");
//        }
//        // 验证token
//        boolean verify = JWTUtil.verify(token, user.getPassword().getBytes());
//        if (!verify) {
//            throw new CustomAuthException(-1, "token不合法");
//        }
//        return true;
//    }
//
//}
